package com.hanbang.qzzds.mode;

import com.hanbang.qzzds.mode.httpresponse.HttpResult;
import com.hanbang.qzzds.mode.javabean.base.UserData;
import com.hanbang.qzzds.utils.http.FileParam;
import com.hanbang.qzzds.utils.http.HttpCallBack;
import com.hanbang.qzzds.utils.http.HttpManager;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import okhttp3.MediaType;
import okhttp3.RequestBody;
import rx.Observable;
import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
 * Created by Administrator on 2016/8/3.
 * http的一般请求
 */

public class HttpRequest {
    /**
     * 订阅
     *
     * @param o 被监听者，相当于网络访问
     * @param s 监听者，  相当于回调监听
     */
    private static <T> Subscription toSubscribe(Observable<T> o, Subscriber<T> s) {
        return o.subscribeOn(Schedulers.io())//订阅过程运行于io线程
                .observeOn(AndroidSchedulers.mainThread())//回调运行于主线程
                .subscribe(s);//订阅
    }

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //                                                 登录注册
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

<<<<<<< HEAD
    public static Subscription Login(HttpCallBack<HttpResult<UserData>> subscriber,
                                              String Telphone,
                                              String Password) {

        Observable<HttpResult<UserData>> observable = HttpManager.getInstance().serviceApi.Login(Telphone,Password);
        return toSubscribe(observable, subscriber);
    }
=======
>>>>>>> c1c89674fee8cddb990ffe27a1db3bfa4f562baa

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //                                                 首页
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    public static Subscription GetArticleList(HttpCallBack<HttpResult<List<UserData>>> subscriber,
                                              int Pageindex,
                                              int Pagesize,
                                              int Type,
                                              int stype,
                                              int userid) {

        Observable<HttpResult<List<UserData>>> observable = HttpManager.getInstance().serviceApi.GetArticleList(Pageindex, Pagesize, Type, stype, userid);
        return toSubscribe(observable, subscriber);
    }


    //=========================================================================转换方法================================================================


    /**
     * String文本 转成RequestBody
     *
     * @param value
     * @return
     */

    public static RequestBody getTextRequestBody(String value) {
        if (value == null) {
            return null;
        }
        return RequestBody.create(MediaType.parse("text/plain" + "; charset=utf-8"), value);
    }


    /**
     * 文件 转成RequestBody
     *
     * @param file
     * @return
     */
    public static RequestBody getFileRequestBody(File file) {
        if (!file.exists()) {
            return null;
        }
        return RequestBody.create(MediaType.parse("multipart/form-data"), file);
    }

    /**
     * 文件路径 转成RequestBody
     *
     * @param filePath
     * @return
     */
    public static RequestBody getFileRequestBody(String filePath) {
        File file = new File(filePath);
        return getFileRequestBody(file);
    }


    /**
     * FileParam集合 转成Map
     *
     * @param params
     * @return
     */
    public static Map<String, RequestBody> getFileParamsRequestBody(List<FileParam>... params) {
        Map<String, RequestBody> map = new HashMap<>();
        for (List<FileParam> lp : params)
            for (FileParam p : lp) {
                if (p.exists()) {
                    map.put(p.getMapKey(), p.getFileRequestBody());
                }
            }
        return map;
    }

    public static Map<String, RequestBody> getFileParamsRequestBody(FileParam... params) {

        List<FileParam> a = new ArrayList();
        for (FileParam p : params) {
            if (p.exists()) {
                a.add(p);
            }
        }
        return getFileParamsRequestBody(a);
    }


    /**
     * String集合 转成Map
     *
     * @param paths
     * @return
     */
    public static Map<String, RequestBody> getFileStringsRequestBody(List<String> paths) {
        return getFileParamsRequestBody(FileParam.getStringToFileParam(paths));
    }

    /**
     * File集合 转成Map
     *
     * @param paths
     * @return
     */
    public static Map<String, RequestBody> getFilesRequestBody(List<File>... paths) {
        return getFileParamsRequestBody(FileParam.getFileToFileParam(paths));
    }

    /**
     * 单个String 转成Map
     *
     * @param paths
     * @return
     */
    public static Map<String, RequestBody> getFileStringRequestBody(String paths) {
        List<String> p = new ArrayList<>();
        p.add(paths);
        return getFileParamsRequestBody(FileParam.getStringToFileParam(p));
    }


}
